package br.ufrgs.engsoft.ui;

import java.util.Collection;
import java.util.HashMap;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;

import br.ufrgs.engsoft.ejb.remote.AutorEJBRemote;
import br.ufrgs.engsoft.ejb.remote.ReferenciaEJBRemote;
import br.ufrgs.engsoft.entity.Autor;
import br.ufrgs.engsoft.entity.Referencia;
import br.ufrgs.engsoft.util.EntityUtil;
import br.ufrgs.engsoft.util.HtmlParameterEnum;

/**
 * Controlador da acao Nova Referencia.
 */
public class IncluirReferenciaController implements Controller {
	/*
	 * (non-Javadoc)
	 * @see br.ufrgs.engsoft.ui.Controller#processaAcao()
	 */
	public HashMap<HtmlParameterEnum, Object> processaAcao(HttpServletRequest request) throws NamingException {
		String idAutor = request.getParameter(HtmlParameterEnum.AUTOR_ID.name());
		if (idAutor==null) {
			// Caso nao exista o parametro idAutor entao o usuario esta solicitando
			// a inclusao de um novo regitro.
			return inicializaFormularioInclusao();
		} else {
			// Caso exista o parametro ele esta processando a inclusao do registro.
			// Constroi o objeto a partir do request
			idAutor = request.getParameter(HtmlParameterEnum.AUTOR_ID.name());
			Referencia referencia = EntityUtil.getReferenciaFromRequest(request);
			
			// Obtem o ReferenciaEJB
			ReferenciaEJBRemote referenciaEJB = (ReferenciaEJBRemote) new InitialContext().lookup("java:global/PublicacaoWEB/ReferenciaEJB");
			
			// Executa a chamada ao metodo do EJB que fara a inclusao no banco de dados
			referenciaEJB.incluirReferencia(referencia);
			
			// Executa o return se nenhuma exception for lancada
			return null;
		}
	}
	
	private HashMap<HtmlParameterEnum, Object> inicializaFormularioInclusao() throws NamingException {
		// Obtem o AutorEJB
		AutorEJBRemote autorEJB = (AutorEJBRemote) new InitialContext().lookup("java:global/PublicacaoWEB/AutorEJB");

		// Carrega os autores do banco de dados.
		Collection<Autor> listaAutores = autorEJB.listarAutores();

		// Adiciona a lista como HtmlParameterEnum
		HashMap<HtmlParameterEnum, Object> parametros = new HashMap<HtmlParameterEnum, Object>();
		parametros.put(HtmlParameterEnum.AUTOR_LISTA, listaAutores);
		return parametros;
	}
}
